{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ***Introduction to Radar Using Python and MATLAB***\n",
    "## Andy Harrison - Copyright (C) 2019 Artech House\n",
    "<br/>\n",
    "\n",
    "# Stripmap SAR (2D)\n",
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Stripmap SAR uses the same backprojection algorithm as does spotlight mode SAR.  The backprojection imaging process is as follows;\n",
    "\n",
    "1. Construct the spatial domain target density array $f (x_i , y_j)$.\n",
    "2. Pulse compress return signals and perform filtering.\n",
    "3. Upsample the returns for better image quality. Upsample factors can be large $( > 100 )$.\n",
    "4. For a given pixel point, $(x_i , y_j)$, find the nearest upsampled time point (interpolate) and add the value of the filtered data to the array component $f (x_i , y_j)$.\n",
    "5. Repeat for all pixel locations $(x_i , y_j)$ and all pulses.\n",
    "\n",
    "The filtered backprojection algorithm has several advantages.  It is computationally efficient and employs the fast Fourier transform (FFT).  It is highly parallelizable as each projection's contribution and each pixel's value may be computed separately.  Also, image reconstruction may begin as soon as the first projection function is obtained, rather than waiting for all projections to be collected.  Finally, the filtered backprojection algorithm does not depend on uniform angular sampling in the projection data, and multiple object rotations or platform passes can be used.\n",
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Begin by getting the library path"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import lib_path"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set the squint angle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from numpy import radians\n",
    "\n",
    "squint_angle = radians(0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set the **x** and **y** image center"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from numpy import tan\n",
    "\n",
    "x_center = 1000\n",
    "\n",
    "y_center = x_center * tan(squint_angle)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set the range to the center of the image (m), the **x** location of the target, they **y** location of the target, the target RCS (m^2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "range_center = 1e3\n",
    "\n",
    "xt = [-3.0, 8.0]\n",
    "\n",
    "yt = [10.0, -40.0]\n",
    "\n",
    "rt = [5.0, 10.0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set image span in the **x** and **y** directions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_span = 30.0\n",
    "\n",
    "y_span = 100.0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set the number of bins in the **x** and **y** directions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "nx = 400\n",
    "\n",
    "ny = 400"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set the aperture length (m) and the antenna width (m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "aperture_length = 100\n",
    "\n",
    "antenna_width = 2.0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set the start freuqency (Hz) and the bandwidth (Hz) of the transmitted signal"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "start_frequency = 1e9\n",
    "\n",
    "bandwidth = 100e6"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set the window type (Rectangular, Hanning, or Hamming)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "window_type = 'Hanning'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set the dynamic range for the image (dB)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "dynamic_range = 50"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set up the image space (m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "from numpy import linspace, meshgrid, zeros_like\n",
    "\n",
    "\n",
    "xi = linspace(-0.5 * x_span + x_center, 0.5 * x_span + x_center, nx)\n",
    "\n",
    "yi = linspace(-0.5 * y_span + y_center, 0.5 * y_span + y_center, ny)\n",
    "\n",
    "\n",
    "x_image, y_image = meshgrid(xi, yi)\n",
    "\n",
    "z_image = zeros_like(x_image)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Calculate the wavelength at the start frequency (m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.constants import speed_of_light as c\n",
    "\n",
    "wavelength = c / start_frequency"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Calculate the number of frequencies"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "from numpy import sqrt, ceil\n",
    "\n",
    "df = c / (2.0 * sqrt(x_span ** 2 + y_span ** 2))\n",
    "\n",
    "number_of_frequencies = int(ceil(bandwidth / df))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set up the frequency space"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "frequency = linspace(start_frequency, start_frequency + bandwidth, number_of_frequencies)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set the length of the FFT"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.fftpack import next_fast_len\n",
    "\n",
    "fft_length = next_fast_len(4 * number_of_frequencies)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Calculate the element spacing (m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "element_spacing = wavelength / 4.0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Calculate the number of antenna elements"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "number_of_elements = int(ceil(antenna_width / element_spacing + 1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Calculate the spacing on the synthetic aperture (m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "aperture_spacing = tan(c / (2 * y_span * start_frequency)) * x_center  # Based on y_span"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Calculate the number of samples (pulses) on the aperture"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "number_of_samples = int(ceil(aperture_length / aperture_spacing + 1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create the aperture"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "synthetic_aperture = linspace(-0.5 * aperture_length, 0.5 * aperture_length, number_of_samples)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Calculate the sensor location"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "sensor_x = zeros_like(synthetic_aperture)\n",
    "\n",
    "sensor_y = synthetic_aperture\n",
    "\n",
    "sensor_z = zeros_like(synthetic_aperture)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Initialize the signal"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "from numpy import zeros\n",
    "\n",
    "signal = zeros([number_of_frequencies, number_of_samples], dtype=complex)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Initialize the range center (m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "range_center = zeros_like(synthetic_aperture)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Phase term for the range phase (rad)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.constants import pi\n",
    "\n",
    "phase_term = -1j * 4.0 * pi * frequency / c"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create the signal (k-space)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "from numpy import arctan, cos, exp\n",
    "\n",
    "from Libs.antenna.array.linear_array_un import array_factor\n",
    "\n",
    "\n",
    "index = 0\n",
    "\n",
    "for sa in synthetic_aperture:\n",
    "    \n",
    "    range_center[index] = sqrt(x_center ** 2 + (y_center - sa) ** 2)\n",
    "    \n",
    "\n",
    "    for x, y, r in zip(xt, yt, rt):\n",
    "        \n",
    "        # Antenna pattern at each target\n",
    "        target_range = sqrt((x_center + x) ** 2 + (y_center + y - sa) ** 2) - range_center[index]\n",
    "        \n",
    "        target_azimuth = arctan((y_center + y - sa) / (x_center + x))\n",
    "        \n",
    "        antenna_pattern = array_factor(number_of_elements, 0.5 * pi - squint_angle, element_spacing,\n",
    "                                               start_frequency, 0.5 * pi - target_azimuth, 'Uniform', 0) * cos(squint_angle)\n",
    "        \n",
    "        signal[:, index] += r * antenna_pattern ** 2 * exp(phase_term * target_range)\n",
    "        \n",
    "    index += 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Get the selected window"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "from numpy import ones, outer\n",
    "\n",
    "from scipy.signal.windows import hann, hamming\n",
    "\n",
    "\n",
    "if window_type == 'Hanning':\n",
    "    \n",
    "    h1 = hann(number_of_frequencies, True)\n",
    "    \n",
    "    h2 = hann(number_of_samples, True)\n",
    "    \n",
    "    coefficients = sqrt(outer(h1, h2))\n",
    "    \n",
    "elif window_type == 'Hamming':\n",
    "    \n",
    "    h1 = hamming(number_of_frequencies, True)\n",
    "    \n",
    "    h2 = hamming(number_of_samples, True)\n",
    "    \n",
    "    coefficients = sqrt(outer(h1, h2))\n",
    "    \n",
    "elif window_type == 'Rectangular':\n",
    "    \n",
    "    coefficients = ones([number_of_frequencies, number_of_samples])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Apply the selected window"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "signal *= coefficients"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Reconstruct the image using the `backprojection` routines"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "from Libs.sar import backprojection\n",
    "\n",
    "bp_image = backprojection.reconstruct(signal, sensor_x, sensor_y, sensor_z, range_center, x_image, y_image, z_image, frequency, fft_length)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Display the stripmap image using the `matplotlib` routines"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(984.9624060150376, 1015.0375939849624, -50.125313283208015, 50.12531328320802)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWIAAAItCAYAAAADunBeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAABR10lEQVR4nO3de3xcV3nv/88TjSTLthRZVixfE5nYIU5ikxg3BgJN+BEgoc2BQk+bAuXS0kALpz8O5fDjUkiA0gLlFM5pgUMgHAIEwi0BwrWYJpRLCBhiEhI7iYzl2I4vkWTZcjyWNPL6/fGsrdmWJWvb1taMpO/79dqvmdk3rZHlZ5559lprWwgBERGpnDMq3QARkZlOgVhEpMIUiEVEKkyBWESkwhSIRUQqTIFYRKTCFIirlJndYGa/rXQ7RCR/CsQTxMzOMrOPmVmnmfWb2V4z+6GZPTe1T6eZvTnjKT8EXJ5PayeHmV0efwddZnbYzLaa2S1m1jTKvm8ysyEze98o264ws5Baus3sP8zsssl5JyL5UiCeOF8DLgX+EjgP+EPgu8D8kzmJmZ1hZjUhhEMhhO6Jb+bkMLMLgO8B9wHPBi4CXgccAOpHOeQvgfcDrzKzmjFOeyGwCLgCeBz4tpktmNiWi1RACEHLaS5AMxCAK0+wz11xn+Elrn8VcAh4AfBboIQHrRuA36aO/wzwLeDvgb3xmP8LNIz4GR8H/ifQgwer/xcPfB8FeoFHgT8f0bb3Aw8BRaAT+CAwK7X9hti218Tji8DXgdYTvN83Ajsz/v6eHt9TLdAB/OGI7VfE31lrat3quO6aSv/7a9Fyuosy4olxKC7/xcxmjbHPi4GdwHvwrG5Ratss4J3Aa4ELgO1jnONy4CnAc4CXAM8DPjBin5cBfcB6PMB+BA+aDwPrgJuBT5lZ+uc/AfwFsAr4G+Ba4B0jztsOvBx4IXAlsBL49BjtBNgDnGVmzz7BPonXALeGEAaBz8fXYzKz2fgHGMBghvOLVLdKfxJMlwUPjD3AEeBuvMa7fsQ+ncCbR6x7FZ7ZPXXE+hs4PiPuBeam1r0c6AfmxNd3AXenthueFX8zta4WGAD++ATv5XVAx4i2DAFnp9Y9M7Z75RjnqMEz9oBnu3cAbwLOGrHfXPyDY118fW5s38LUPlfE8yQfeEfj618CtZX+t9ei5XQXZcQTJITwNWAxcA1eG34G8HMze3uGw0vApgz73RdCOJR6fTdQhwev4X1SbQrAPuD+1LpBYD8wXFs1sz82s5+Y2R4zOwR8GDh7xM/eFUJ4NPX6HjwgrhqtoSGEoRDCq4GlwJvxksb/ALaY2YWpXa/FSxgb43Fb8QD7ylFO+2xgLfBnwDbglfH9iExpCsQTKIRwJITwgxDCe0IIzwBuAm4ws7pxDu0PIQxNUDNGBqYwxrozAMzsacCtwPfxD5FL8Dp07UQ0JoSwK4TwuRDC6/Gyy1E8ICdeAzzZzErJgteM/3KU020LITwcQvgS8G7gNjMb7cKfyJSiQJyvB4ECXgMG/8o9Vo+ALFab2ZzU66fFc249jXNehme77w0h/DKE8Ahwzij7LTGzZanXl+J/P5uz/qAQwn5gN16OIGbG6/Fa98WpZT3Qbma/f4LTfQ7/sHh91p8vUq0KlW7AdGBm84Gv4Bev7iPWPIG3AD8MIRyMu3YCzzKzz+NZcNdJ/qgC8Gkzew9eBnk/8MkQwhOn0fyH8SD7MrzU8Xz8q/9IReBmM3sT0AD8H+DbMXAfx8xeiwfV2/EPilnAK/DeDskFxtcA94YQNoxy/A/j9v8c7fwhhKNm9hHgnWb2idP8HYhUlDLiiXEI+DneVexHwAPAPwJfAP40td+7gGV4YHr8FH5Ocu478QD3H3iwP2UhhDuAf8Z7V9wHPDe2c6ROvIRxR/y5vwNefYJT/wKYjXen+y0eUC8HXhFCuCWWa14OfHWM478C/LGZnXmCn/Fp/MPp/z3BPiJVz/x6jlQ7M/sM3o/2Dyvws2/Ae1lcNNk/W2QmUEYsIlJhCsQiMq2Z2VVm9pCZdZjZWyvdntGoNCEi01act+Rh/NrHTryP+p+FEB6saMNGUEYsItPZpfgo0d+FEAbwC84vrHCbjqNALCLT2RJgR+r1zriuqkz7fsRms4NPjiYnrzYuDUC9D6Yu4I81+Me44eP0hiiP4RuIC4N4z77iZDc8J7u7QghnVboVU8kKs3A455+x27t0HkmtujGEcGPOP3ZCTftA7EH4tZVuxBRWwKd3WAtH2+BMPJ84Cx+ikYwZTKbj6cJzjoFBfEbLnwK7JrvROblhrFnxZAyHyf9/3w1wJISwbozNu/C++4mlVOEf5AwIxCJSKUbFg8wvgZVmthwPwNcCL61sk46nQCzjKOGZbQuUmmBPg//VDFHOiGvwyTiL+ESdveCjvA/GRaQyQgglM3sDPqlVDfDpEMIDFW7WcRSIJYMefIRzC4R26IoTs9UDjXGXI5RLwgE8ABfxQC4zlTFB0/idhhDCd4DvVLgZJ6RALBntAtqAWii2ey14Dp4Zg8fbIp4IM0g5EE+XC3Ui+VEgloz68BttNABNUGzxeDuEf+EbwrPiUrKvgrBURY14StDvSE7CPnxCtSagAUoNXg9OAnEAj86HKdeIRWQ8CsQikptqqBFPBQrEchJ68NJEC36VrglC04jrcX2Us+G+SW+hyFSkQCwnaS/lQJxE4CTnScoSyYU63ddzplONOBv9jqakRiqXbZbwzLiHciBuiI/F1DKILtaJZKNAPCVV+iv/QTwQg/8JFfFgnAThpDyhPsQznWrE2SgQi0huVJrIRr8jOQV9eEacnp0tKUWU8DqxiGSlQCyn6CDl2nAD5WCcDLFTH2JRaSIrBWI5RX148C1Q/jNKsmLVh0VOhgKxnIbkgl0t5R4S6rYmZaoRZ6PfkZyGpCtbLf6nlARkZcMiJ0OBWERyoxpxNgrEcpqSi3MFNOuayKlRIJYJkATehhPuJTOPMuJsFIhlAhTHeC4iWSgQywRSEJbjKciM74xKN0BEZKbTh5WI5EY14myUEYuIVJgyYhHJjUbWZaOMWESkwvRhJSK5UY04G2XEIiIVpoxYRHKjGnE2yohFRCpMH1YikhvViLNRIBaR3Kg0kY1KEyIiFaYPKxHJjUoT2SgjFhGpMGXEIpIb1YizUUYsIlJh+rASkdyoRpyNMmIRkQpTRiwiuVFGnI0yYqmgltTzFZTzgnNS6xtTz5U3yPSkv2zJWSPQl3oEaMCDbRH/E1wF9ADtQFPcpzY+bwQ2x+cFoCMeXwRKk/EG5DQpyIxPvyPJWfLFdCXwa/xPLsl45+OBtgFYggfbNqAz7rM0Pl+LZ8/bgdnxmA5gVzxuV+7vQiRPVVuaMLOVZnbEzD6fWvdSM9tuZk+Y2dfNrOVE5xCRyjKgtpDvMh1UbSAGPgr8MnlhZhcCnwD+HE+bDgMfq0zTJLvBEY/twBo8+z0Hz3ab4vpVeHa8Iu7TACxI7bMAOB/Pjlvi8ekassjUVJWfJ2Z2LdAL/Az/XwnwMuCOEMJ/xn3eCWw2s8YQQt+oJ5Iq0ES5NgwecMFLCqvwWm87WIOvDg3Q0OBxu9QALPW0KiS14xa8XNEWz12M63pyfA9yqsygkHeUmQaXCqouIzazJuA9wJtGbLoQ+E3yIoSwFRgAzhvlHNeZ2UYz2+iJs1RO8r8wyWIH47q2uL7Wg3BNfGnAnNShDcRtDfGY5CLeAjyYN8TzJs9Fpp5qzIjfC9wUQthpZun1c4EDI/Y9wCjfTUMINwI3ApgtDjm1UzJJ95Qo4oF0PuVSRQzCQ/i/cCG1e318/kTcXkPMfpriDgfxf/7B+Pxgju9DToUZ1NaMv99MV1WB2MwuBq4ELhll8yHKfZsSI7/3StVJ/sSK8bExrjvMcI+KJMgWKAfl+rg5SaDnpk5xTObbgP8ZlMrnE5liqioQA1fgRcRHYzY8F6gxswuA7wFPSXY0syfh/10fnvRWikgmk1Ijngaq7Vd0I3Br6vWb8cD813hR8G4zexbeIfU9wG26UFftalOPjXjmWjx2l6R4VIpLAc+Kh1LrYMRFmcGRK0SmrKoKxCGEw6SurpnZIeBICOFx4HEzex1wC15k3AC8uiINlZOQ1IILeABOlkHKAbnBY2pfalfwQHxMhT85V5FyTTgJ7LooW42SfsRyYlX9Kwoh3DDi9ReAL1SmNXJqiqnHPjx4tsTHWvxPcHbcJ9Z+SwU8wA6mzlOKxxRS5+mjfKGuB12sq0JGuUeMjKmqA7FMB0kgTvr5JplsZ3xdwgPwIH7RbZDyVbqk9JBkz0mvi4Op18m5R5Q7RKYQBWIRyY/ulZSJfkWSsySrTcoGHXFdMlFPOpNNMuGRxxbHeBSZHhSIZZIkgbeEB2OALRVqi0waZcSZVN0QZ5mu1NVMZCz6rBKRfCnKjEsZsYhIhemzSkTyo37EmSgjFhGpMGXEIpIf9ZrIRBmxiEiF6bNKRPKjjDgTZcQiIhWmzyoRyZd6TYxLGbGISIUpIxaR/KhGnIkyYhGRCtNnlYjkRxlxJsqIRUQqTJ9VIpIv9ZoYlzJiEZEKU0YsIvlRjTgT/YpEJD8KxJmoNCEiUmH6rBKR/CgjzkQZsYhIhemzSkType5r41JGLCJSYcqIRSQ/qhFnooxYRKTC9FklIvlRRpyJMmIRkQrTZ5WI5MdQr4kMlBGLiFSYMmIRyY9qxJkoIxYRqTB9VolIvhRlxqWMWESkwhSIRSQ/Sa+JPJfTaZ7ZfzWzB8zsqJmtG7HtbWbWYWYPmdnzT+8nnZi+NIjITPZb4MXAJ9IrzewC4FrgQmAxsMHMzgshDOXRCAViEclPlfeaCCFsBjCzkZteCNwaQugHtplZB3ApcHce7VBpQkSmulYz25harpuAcy4BdqRe74zrclHFn1UiMuVNTkbcFUJYN9ZGM9sALBxl0ztCCN/Ir1nZKRCLSL4qHGVCCFeewmG7gGWp10vjulyoNCEicrxvAteaWb2ZLQdWAr/I64cpIxaR/FT5pD9m9kfAvwJnAd82s00hhOeHEB4wsy8DDwIl4PV59ZgABWIRmcFCCLcDt4+x7X3A+yajHQrEIpKfKu++Vi1UIxYRqTB9VolIfpQRZ6KMWESkwvRZJSL5quJeE9VCGbGISIUpIxaR/KhGnIkyYhGRCtNnlYjkRxlxJsqIRUQqTJ9VIpIfZcSZKCMWEakwfVaJSL7Uj3hcyohFRCpMGbGI5Ec14kyUEYuIVJg+q0QkP8qIM9GvSETypYt141JpQkSkwpQRi0h+VJrIRBmxiEiF6bNKRPKjjDgTZcQiIhWmzyoRyY+hXhMZKCMWEakwZcQikh/ViDNRRiwiUmH6rBKRfCnKjEsZsYhIhemzSkTyoxpxJsqIRUQqTJ9VIpIf9SPORBmxiEiFKSMWkfyoRpyJMmIRkQrTZ5WI5EtRZlzKiEVEKkyfVSKSH/WayESBWETyo4t1mag0ISJSYVUViM2s3sxuMrPtZtZnZpvM7OrU9ueY2RYzO2xmd5rZOZVsr4iMI8mI81ymgaoKxPivdQdwOXAm8PfAl82s3cxagduAdwItwEbgS5VqqIjIRKmqz5MQwhPADalV3zKzbcBTgfnAAyGErwCY2Q1Al5mdH0LYMtltFZGMdLFuXNWWER/DzNqA84AHgAuB3yTbYtDeGteLiExZVZURp5lZLXALcHMIYYuZzQUeH7HbAaBxlGOvA67zV2fm21ARGZt6TWRSlRmxmZ0BfA4YAN4QVx8Cmkbs2gT0jTw+hHBjCGFdCGEdzM61rSIip6vqPqvMzICbgDbgBSGEwbjpAeCVqf3mAOfG9SJSjZQRZ1KNGfHHgVXANSGEYmr97cBFZvYSM5sFvAu4TxfqlsTHS+PjOUADsKAyzRGRk1ZVn1WxX/BrgX5gjyfHALw2hHCLmb0E+Dfg88A9wLUVaaiIZKOMOJOq+hWFELbj/3Rjbd8AnD95LapGLUAP8Ef4l4RXAp8CrgY2A5fhpfOOuP8G/HrmcaV0EakS1ViakBNa7Q+2xh+X1wJr4+rLgJUwrw2v7lwWj7kMkYqpyXmZBhSIp4wGvP67BFgASwFWw0KANX5pk7Uwj7itxZ8DHpRBdWOR6lRVpQk5kUZgDR6Qr4a5AC+GWUBrg29eVuv/oq1xt4XA/svxUkUDHq33VaDtMmOpRpyJMmIRkQrTZ9WUsCI+tvtDYwsM4nXhEnAxcCQ+7sSz5TlAM8AVXqLYfxlQRBfuZFIpI85EGfGU0IaXF1qARrgI7+B3ET7ecHV8vAgPvnOBs/BgvCKuYy3+P2LlpLZcRManQDwlNDJ8oc1q/XpdEU+Qj+DB9lB83YwH4NZ42Eo8MDc2ALX4wUpRZBKp18S4FIir3gI8gLb717yFeLCtxeczKsTXs+LrZjwAt8Z1rXGfNvALdi3xUUSqhVIjEcmPasSZKCOuem34lbk2f7kwrm5Nba6Jr2uJ9eD4OIiXJUrEyUIb4lKbc5tF5GTos6rqxZk/C8AQHlifwOvC/Xhd+In42IsH5D14wO6NpyjiF+9oiSsaUO8JmRTKiDPRr6jqxX+iRvzCXD0eYM8HuvCA3Bkfd+Kj6nbiAfkInhX3J+dqAfbigXgQBWLJnQJxJipNVL0S0ODlh+a46nG8JNELLAN+i2fEmyiXLFrxWDsUTzGI97igB12sE6kuCsRVrwg0eFY7B3/sxwdpFPHgvDH1ODceNhcvBSdJ7xPJtiQQp6d6FslPqMl3mQ4UiEVEKkzVm6q3F7jEM9ul+MAN8HJD8rgjPt+ROmwQ/9ftHfHIXryuofqw5C8YDCnKjEsZcdXbi0fbHr/4lgTbLrxE0YVXGnbHxz14EN4b9+vEL/DtjqdhH+q+JlJd9FlV9UrAQWAX7Lms3BVtE54dbwLW4bdQfRrwEzzO/hwPwB3AJQC/hkNr8RMMIjIplBFnoox4StgH7ITizvKqr8fH7wLPxAPwM4GPD3qPiS/2xL7DnbG3xT0QwD97daFOpJros0pEchMMSjV553tHcz5//pQRTwmbgdnABh/YMQcImz3T3YVPf9kLXAjwj/FWSf8a+xS3l/sfsxcfqZcUkEWkGigjnhJ68EmHf12eU4JVMB8fYdeKD+g4C+BPfBY2VpSnw5wFPh/mXvyffPuktl5mrmDGUCHvMDOQ8/nzp4x4yoj91Y7g2a/hgzRqKHdpOwSwCg4AXOaPtfhIPFqAX5fPIyJVQxnxlLHZH3YfhN0l4BH4wXroKsJdDX7x7lyA2+CuF8fHN3m3tV7wnhfb0fBmmWxDNdNk+FuOFIinjJ74+OHyqq5OYAv861XA9+BD/x24FL74buClcPe7geuh+G7gmniQekyIVBsFYhHJTcAYmi73M8qRAvGUcjnQBw3XeA+JRXiPiCKwbH28f10TbLjeB3l89Xq/mHf726GxFvruwP/JVScWqSYKxFPGZdB4hc87fBXl3hLz8S5tcz24nlHfz9HL5ngp+Hw8OM+v9Q4Td/x3fATIlslvvsxIAaOkjHhcCsRTxlrvovZUvN/wucCiEnNbe2mc3UcNQ9TETLd3XjNDpQKHCq0+98QhvPdEYxP0za9Q+0VkLArEU0Y37G7xLmtdxDs5FzhE8/Bk8PWz+uk/Us/hvgaOPjHb99uD95rYQ5xwTYM5ZHINKcyMS/2IRUQqTB9VU8YXPMP94lr44pXQ2OD14rkFDrW3QhEOnYWXIYp45vw4ng1vBUIR+CY+HZvI5FCviWwUiKeEAvAn0LoSnoXPsnYRsBDqlh6ksbmPujMGqKOfAkP00cjQ0Rq6d7bB7oLPSfxQA2z4U/gxwB34KDuRfCkQZ6NAXFXW4l0d2vC0djPQCateBW8EroBV593LJdxLO53Mp5v5dNFIH/Wp8faHmc3AGXXsPbuNx85exO71i3mIJ/Oray+DzwCfvyZOML8CWBWPKuI9Ku6flHcqImUKxJOuEQ9+JY7NSl8Ky1d6z4hmoKsJNrVBXye8DpZe18E6NrKee1jN/TEQd9F68ACFA/jdOhJzoDQHuprOZAfL2Ecb97Oaxec9xh2v+WPA4J9Ww6p2n0y+Buhu8KHR+1cBX44nuhz/UCC2VWUNOXnKiMenQJyLAj7Jzr4R6y8F1oK1xUnal+BlAmDZSngR5UC8Oz7e0Q5XwbO5k6eykfX8gtX99zHnkaN++n345D4lYAgPqnOgMAsWLj7AwmUHOHj2wzTX9FLDEHuf1MYvrvp9+Kd2uBK4IjZ3D36X5++u8lo0S3xj7JFB1wrgUyPe0wo8UO9EM7qJnDoFYhHJjQZ0ZKNAPOFWxKUFn7X9R6ltV8KyWs96i8DGtcA9QBOsxy/CtQPNAXaalxs2wrnnPcDFbGIN93PJ4U3UbwQeAbopZ8T9eFZcwOchngMs8O1Njw1w8bp76atv5CGezIPrLuCQtfow6HUlH423d44f30tM0tf6ve6WxqZvroWOy4Db44q1+BzJbcRhe5QnJgIf2rcgNmrXaf1GRaY7BeJT0oJ/dYfjL26tBVb5fMGhDfgpHoxaYFGt93ZopzyvcMcaoMFj2kVwZvseGusOsa95AQNdTdAK7XTSzjbOZSv1m/EgvJnxA3Gy/hDMOfMoKy7qoJ1trJjdwaa5rfBkWHp2J/X003tWM91dS2AbcMcSfw/nAwthOKHpWEM5EJ/vb2QesL8dfwPpD51VlANxkWODtMwU3mtCYWY8+g2dUCNxONoISZCB8jy/4FngKg9OzcCOJiitwOd2aPcA3A6cg9dzdwAd5wCeJZ/ZvofFdbtppI+alhLblzTBXGhjL4vZzeKD++BRfHmM42vEIwPxEOV/4TZYsGofi2t2s4B9vn5ZP4t5jDr6qTtjgO72xbDcgCVgDf5Zsywe/wQx6C7BM9x2n3QouQPI7naODcTn+A9lEA/CIwNxQ1wUoKVyzOyf8TliB/Ae968OIfTGbW8D/hL/n/S3IYTv59UOjawbUyMeiRaMsm0B/p19KeVeBXF9Ac8i5+OBavi7/QIPWq2UA9gi4vEt0ArNdb0008t8uphHLywqwSxoppdm9lPophzTevCMuBuK3XCwB3p6/HHk9mRp6hmgmf00sx9qYG5zH4340kwvDa293m5a/MJd8oHSHNvbHLcBUFve1px6H8Na4pLMSjTSEvxTabRtMp0MxZlQ8lpO0w+Ai0IIa4CHgbcBmNkFwLX4PIdXAR8zs9yK3QrEIjJjhRD+PYSQzAv7c8qZ0wuBW0MI/SGEbXjfzUvzaodKE2NqikuJY7tsNeCZXpLJtRx7THKX5Wb86/zwfl5mYA5Qj//m50K8EyjMgtkUmc1h6hmggSJ1cw8zQBN1DPiAjX68tnwoLv2+FPuhWPIiQG2p3HqeGLEcgtlnFZkd79JRP6ufOvqZTZEis6mb1U+xIR5d722iPjZxVtLeJv8Blto+K/m9NOKpeCEeVJv6naW1xPM0xsfRyj8yHUzSyLpWM9uYen1jCOHGUzjPXwBfis+X4IE5sZPyhaEJp0A8piSYjPwVJa9rRzzG5zUjd01v59j4NIZkSsuawtDwHO41DI2672DJl5NRwxDUQqlUA3Wj7VHgmB83eHLnP37i+dEamPx+dQ89OW1dIYR1Y200sw14wXCkd4QQvhH3eQf+h3pLPk08sRMGYjNrBV4B/AHwFPxG7QeA3+DjYW8OITyedyMro4hHoJFBpEi5J0CBY+8Bd9iz1KG4FKEcxYqezSZLKbWJIhxpwGeLqGMg5sD9xToowgB1HKahnH0mSz3UzoGGfiiVoFCC2gI01Pu2Y/aPzwfi+SnAwJF6BurqAeinnoEj9bHNpXLm/UR8m8nr5P0GPJGdFR85yLGZ7UE8yJbi85G/wyLjfiLJlBeg4v2IQwhXnmi7mb0K+EPgOSGEEFfvonypGrxkkVs/zDEDsZm9H3gZ8B3gJrzDVB/lMbqXA782s1tCCG/Nq4GV04N/bR55Vb/EsV+/00Fmn/+GuuLL3uQ8AHv9dTKXcNJnl0GgG3qX0kcjjTQOT9xz9MAc6IdemumjkdJ8KJxJ+TpYCeiPxYJkiHMN5RLIfI65ZtZ/JiSX5wCKXc30NjVTxwC9NFPsavaPWQ56nOyiXJroStrbXf79dMeyTHd8f8f8rpJyTpHj50Au4n/TyaNIZZjZVcBbgMtDCIdTm74JfMHM/gVYDKwEfpFXO06UEe8EVoQQ+kfZdi/eyFnAa3JpWcWV8GnLRvta3Uk5ne1MrY/dFXa3lAPZcKDp9O5qC/EscpAYn/YC22HHUvY91kbN4iH6qWff0QXDd9fYSxv7aGNv026WLOv2Q5JMNemuNmKIM3Pxzh2Ly8ve2QvYSxt7afP9dxp7n9Tm/YiPNvsgkp3gQXQn7IzXLQrxbe6Hcle9Ttjf4plyMb0+8Qj+IVUaZVvqdyXTXNX3I/43PN34gZkB/DyE8LoQwgNm9mXgQfyP+PUhhNHrgxNgzN9QCOHfxjs4hHAEfyMiIlNOCGHFCba9D3jfZLQj80eVmZ2D14nnpteHEL4w0Y2qHmNdBdtMuTwxcmKf+6C0CrqSyXCSGcv2+dNGPBvuj6ehA9gFD10GW+rZfaSd3tZeinvm+aY+6KSdDs6lmV4Wr+zGDsRTzqdctR8rI14OLIbSSj9PJ+3sYJnXe7fAzqXncsacwxztnuPjTjaDZ7MNsGVpuey7Nb639PukAMVkiPPI+Y23x9/NSV/pk2lE8xFnkykQxxEm78TT9PTVqQBM40A8lhPNn/BTPEgngTjtPrh3TbmG3HUQHyLdAxvxKSoeN4rz5nlZYhPQDVt/dwEPPukCZlOksaWP1esexs7E49xiRg/Ec2ITlkNpMdzftIr7Wc39rGbnfSs8wP4SONM42jDH2/RzfOoL+vzJ5ivLb6GvGN9bYnvcb0F8v+k/i8Ro60RkpKwZ8d8B60IID+bZmOmhhAfX0SZYvwPYBTtWx/2SoA3cX4TmePuj+b4bW4AwCBtq+fF1v88A9QxRQ19LI+3rO2nu38+cx456vTip5BfwiteZcHBBHTtqlrGPBTzIBdzJs/lZzzNgA8Bm+OGqcvDuxgPx7kdS7+O70Jf0k+7g+OxfdV4ZnzLi8WUNxN0ce1VKTkkJv/A62sXXT8GPr4GftHuviv3gGWUnfGUVmxdeQvd/mT9cpljBVhrqD7N4+WMUGGIufQxR8K5pQBfz6aORTpYPB+K7fvd8+IrBzQB3wLZB2LEmVmAO4uWF9HwRuV0kFpGUrIH4jcCNZvYRRqRFIYRHJ7hNIjJNqEacTdZAXAc8D3jpiPUB9FueGD3Azf4b3Z+sawDOgQ2DsGkN+/76bPbNOpu7Xn4l55zdwRAFnsxDdDOfc9nKXhYwQD3N9LKJi2mml4d/txoeNx+C80agOAjchmfbt0PpF6gvr+RFE8NnkzUQfwx4O3ArugIziYp4oXiLX0x77y5gLXS0sf3/ng/vg50/XwG/hU0vfxq8dzN8YpX/K10E+zadDT9+N8y7Hva/Gy9Aj7zvnIKwSKVlDcQF4P/m2aFZxrFoDezeAG++2sc11gCv6ofWeuZ/fRfdv1xCw5sXsqzpPh5uXcOiF29j92eXw4uu965q773e70+34V/wsXgKwDI5qnxAR1XIOg3mh4C3Whx6IhXQCnClD7RsBn4P5i/sgvNh2Rk7YFk/y5p2MJ9uWOGTybMUv5HGUuBi4vzHazl2xjgRqbSsH1V/iw/OfbuZdac3hBDOnvBWyfG6AHq8f/F+4Ano7lwMW2Dv77fBlnq6F85n6Iwa+C08tsa3DQ9P7iTOyNmHOsDIZNHFumyyBuKX59oKEZEZLFMgDiH8aPy9JFe7dwK/hh9f4SOKS8Asg0/B7hXL4e+h+61L6J61BN4M+2adDf+AlyY6gK7b4M4Xc/xQZJH8KCPO5kTTYP4t8IkxZl9L9qkHXhtC+N95NE7SbgIKsGFnfH49vOM+oAfeeAXc/274++vjgL53w0veAnzQZ4JjEC9JjDbaT0Qq7UQX6xYCHWb2CTN7qZk91czOi49/ZmafwGeHGe3umpKLNXgQxu9eTx9cfQXcPwjPvj6Wfu+Ba64H7oNl1+OF4Ssq0FYRV/L7zeS2TAcnmgbz7XFS5Ffht5ReTXnw7X34hPFvDyF0j3UOmWgL8L7Al/tD4TJYB1ALz8RnXCus93WF9T7v8Rdf5f/KpUfwq3ciUm1OWCMOIXThXdc+NDnNEZHpJFT/xPBVIWs/YqkKJTwVnu1Pm+Oq1ri5Hp+5jdTjsL54rIhUG31UTSmP4KMz7oFNV/sI6Gb8XnIl4IHU625i3+P7oNSAj6TTHZNlcqnXRDYKxFPKdnxyoD7YEW9cevuL8V4RtXjXtEH8ol6nb+d7qeM1TYhINVIgnnKSexcld8tIuqQ1UA6030OkWigjHt/J3LNuPvACYFEI4YNmthg4I4Qw8n5AMmnOwTPkNfE5lO8OMtpMayJSjbLes+5y4Gv4ndUuAz6ITz/zZuCa3FonIlOa5iPOJmtG/BHgT0MIPzSzZNrye4BLc2mVjKOAz4W5Fq8Dr0ltWxnXL8FLFEk37+2T2UAROQlZA3F7COGH8XmIjwMncbxMuNr4mL4AN5haD3A4vj44WY0SOYb6EWeT9Tf0oJk9P4Tw/dS6K9HkBRVSwgc3HsZHy9XiMwHV4v+km4F2NJJOZGrIGoj/DviWmX0baIjzTFwDvDC3lsk4SpQD7R2jbN83yjqRyadeE+PLOg3mz83sKcDLgE8DO4BL1WNCRE5EAzqyyVy8CSHswntLiIjIBMrafe1zlC/SpfUDO4GvhxB+M5ENk6yWxMdd+L3oCnhZooCXL0QqRxlxNlkn/TmA14MND7wG/BdgCO9HdbeZvSKXFsoJtOCBuB2/FcdayoM72ikHaRGpZllLE+cBLwghJONqMbOnA+8JITzXzK7C+xp/duKbKGProXzfpKSLWgnvM6yMWKqDBnSML2sgXo8P4EjbSHlAx/fxacFk0qUHaqS7qykIi0wVWQPxJuB9ZnZ9COGImc0CbgCSuvByPD0TERmmAR3ZZK0RvxJ4FnDQzPbg34N/P64HL1b+zcQ3T0Rk+svaj7gTeIaZLQMWA7tDCI+mtm/Mp3kiMpWp10Q2J/udoR94HCiY2ZMAQgi/m/BWiYhMQWY2D09Wi0BnCOFoluOy9iO+Cr+P+6IRmwLo405ExjbdM2IzOxN4PfBnQB2erM4C2szs58DHQgh3nugcWTPijwLvBW4OIeh+OyIiZV/Fu+4+K4TQm95gZk8F/tzMnhRCuGmsE2QNxPOAT4QQRhtdJyIyqpkwMXwI4bkn2PYr4FfjnSNrr4mbgFdn3FdEZEYxs4KZWXy+zMz+2MwuyXp81kD8NODjZvawmf1nejmVRp8OM2sxs9vN7Akz225mL53sNohINkk/4jyXSjOzv8IneNken/8Q+GPgVjP7/7KcI+u7+FRcqsFH8buDtAEXA982s9+EEB6oaKtEZKZ6I3Au0IjfleGcEEKXmc0Gfgl8YLwTZO1HfPNpNHLCmNkc4CXARSGEQ8BPzOybwJ8Db61o40RkVNO91wQwEELYD+w3s44QQhdACOGwmQ1kOUHmvN7M2vC5JVrx2deIP+zTJ9fm03IeUAohPJxa9xvg8vROZnYdcJ2/OnOy2iYiM1NDrAefAdTF5xaXWVlOkLUf8YuAzwOPABcCDwAXAT/B79gxWeZy/J0wD+BfCYaFEG4EbgQwW6yeHiIVMkNG1u0B/mWU58nrcWXNiP8BeHUI4Stmtj+EcImZvRoPypPpENA0Yl0T0DfJ7RARASCEcMXpniNrID47hPCVEetuxqP9m0+3ESfhYXx49coQwiNx3VPwDF1EqtB0z4jN7MUn2h5CuG28c2QNxPvMrC2EsBfojJPCdzHJw5tDCE+Y2W3Ae8zsNXiviRcCz5jMdoiIpFwTHxfgseg/4utnAz8DJiwQfxJ4JvA14MPAncBRjq2FTJa/wevS+4Bu4K/VdU2kOs2QkXWvBjCzfwcuCCHsjq8XAZ/Jco6s3dc+kHr+WTO7C5gTQth8km0+bSGEHuBFk/1zReTkzbCJ4ZclQTjaC5yd5cCsI+uOEeciLpjZyLqxiMhM9UMz+76ZvcrMXgV8G9iQ5cATflTFkSFvw2uxj+C3R2oF/ifwXPyCnYjImGbAxToL7g3xwt2z4qYbQwi3p/cZ6xzjfWf4KHAJfnPQq4HV+H3bbwb+KhlBIiIyg91pZl8DvhF7SNwGYGZ1Zvb/4LeUu5MT1IvHC8TPBy4OIewzs38FHgUuDyH8eCJaLyLT2wwZ0HEV8BfAF81sOdCLj6irAf4d+EgI4d4TnWC8QDw3hLAPIISw08wOKQiLiJSFEI4AHwM+Zma1ePm2OHKS+BMZLxAXzOzZpOaWGPk6hPAfox0oIjITuq+lhRAGgd3j7jjCeIF4H8fOJdE94nUAnnSyP1RERMpOGIhDCO2T1A4RmaZmUD/iU3ZK/YhFRGTi6KNKRHIzQ3pNnDZlxCIiFaaMWERyo4w4m0wZsZmdZWZz4/MaM3u1mb3SzJRRi4icpqwZ8beA1wH3Au/D598cxOeg+O+5tExEpgVlxOPLGojPAzbF5y/HJz8+hN8ZQ4FYROQ0ZA3EQ/jdSc8DDoQQHo1libn5NU1EprqZNrLuVGUNxN8FvgzMB26N6y4AduXRKBGRmSRrIH4NPpXbIPC5uK4Vn59YRGRUM+wOHacs662S+oEbk9dm1gDcHdeLiMhpyNp97UNmdml8/gdAD7DfzK458ZEiMtMNUZPrMh1k/c7wMuBd8fm78J4TB/A7Ot+RQ7tEZBrQgI5ssgbi2SGEw2Y2H3hSCOFrAGZ2Tn5NExGZGbIG4ofN7GXACuAHAGbWChTzapiITH3qvpZN1kD8N8D/wntN/EVc93z8fkwiInIasvaa+CU+mi697hbgljwaJSLTh7qvjS/zb8jMrgBeASzBB3J8LoRwZz7NEhGZObJ2X3sNPrJuD3AbfnO8L5rZX+XYNhGZ4pJeE+q+dmJZM+K3AM8NIfwmWWFmXwK+Bnwyj4aJiMwUWQPxfODBEeseAlomtjkiMp2oH3E2WSd2/wnwL2Y2G8DM5gD/DPwsr4aJiMwUWTPi1+Gzrh0wsx48E/4Z8Gd5NUxEpgf1Ix7fuIHYzGqAq/F+w63AYuCxEMLOnNsmIjIjjBuIQwhDZvYvIYRPAzvjIiIyLk2DmU3WGvEdmmlNRCQfWT+qZgFfNbO7gR1ASDaEEF6RR8NEZOpTr4lssgbi38ZFREQmWNa5Jt6dd0NEZHpSRjy+E9aIzewyM/vAGNveb2ZPy6dZIiIzx3gZ8duBj42x7UfAOwBdxBORUalGnM14vSYuBr43xrYfAE+d0NaIiEwiM3uvmd1nZpvM7N/NbHFcb2b2v82sI25fm2c7xgvETUDdGNtqgcaJbY6ITCcBH1mX53Ka/jmEsCaEcDHwLcr35rwaWBmX64CPn+4POpHxShNbgOcB3xhl2/PidhGRMVT3gI4QwsHUyzmUu+a+EPhsCCEAPzezZjNbFELYnUc7xvsNfRj4RBzm/PUQwlEzOwN4EfBR4E15NEpE5CS0mtnG1OsbQwg3Zj3YzN6H3/TiAPDsuHoJPmYisTOum/xAHEL4gpktBG4G6s2sC59voh+4PoTwxTwaJSLTwyRdrOsKIawba6OZbQAWjrLpHSGEb4QQ3gG8w8zeBrwBuD6ndo4py1wT/2JmnwKejs9L3A3cPSKlFxGpSiGEKzPuegvwHTwQ7wKWpbYtjetykXVAx0Hg+3k1QkSmr2ruvmZmK0MIj8SXL6R83eubwBvM7FZgPXAgr/ownMTNQ0VEpqH3m9mTgaPAdnzudfDM+AVAB3AYeHWejVAgFpHcBKyqJ4YPIbxkjPUBeP1ktSPrNJgiIpITZcQikhtNDJ+NMmIRkQrTR5WI5Kqae01UC2XEIiIVpoxYRHKjaTCzUUYsIlJhyohFJDcBY+ioMuLxKCMWEakwZcQikp8ApZIy4vEoIxYRqTBlxCKSmxCMoZLCzHiUEYuIVJg+qkQkN54Rq0Y8HgViEclPQIE4A5UmREQqTBmxiOQmBKM0qIx4PMqIRUQqTBmxiOTIODqkMDMeZcQiIhWmjyoRyU8A1GtiXMqIRUQqTBmxiOQnmDLiDJQRi4hUmDJiEclPAEpW6VZUPWXEIiIVpoxYRPJVqnQDqp8yYhGRClNGLCL5CSgjzkAZsYhIhSkjFpH8KCPORBmxiEiFKSMWkfwEYLDSjah+yohFRCpMGbGI5CcAQ5VuRPVTIBaRfOli3bhUmhARqTBlxCKSH3Vfy0QZsYhIhVVFIDazejO7ycy2m1mfmW0ys6tH7PMcM9tiZofN7E4zO6dS7RWRjJKMOM9lGqiKQIyXSHYAlwNnAn8PfNnM2gHMrBW4DXgn0AJsBL5UkZaKiEywqqgRhxCeAG5IrfqWmW0Dngp0Ai8GHgghfAXAzG4Auszs/BDClsltrYhkphpxJtWSER/DzNqA84AH4qoLgd8k22Pg3hrXi4hMaVWREaeZWS1wC3BzKtudCzw+YtcDQOMY57gOuM5fnZlLO0UkA2XEmUxKRmxmd5lZGGP5SWq/M4DPAQPAG1KnOAQ0jThtE9A32s8LIdwYQlgXQlgHsyf43YiITKxJyYhDCFeMt4+ZGXAT0Aa8IISQnirkAeCVqX3nAOdSLl2ISLVSRjyuaqoRfxxYBVwTQiiO2HY7cJGZvcTMZgHvAu7ThToRmQ6qokYc+wS/FugH9nhyDMBrQwi3hBAeN7OXAP8GfB64B7i2Io0Vkew0DWYmVRGIQwjbARtnnw3A+ZPTIhGRyVMVgVhEpilNg5lJNdWIRURmJGXEIpIf9SPORBmxVDHlCTIz6C9dqlQjMLIX45K4rhHYPuktklOgjDgTZcQiIhWmjFiqVBvQkXrdAKzAR7WrY+qUoYw4E2XEUqUOjni9IPV812Q2RCR3yoilSu0b8bonLrXxUaYMZcTjUiCWKWLUifak2qk0kYlKEyIiFaaMWETyo4w4E2XEIiIVpoxYRPKjaTAzUUYsIlJhyohFJD+aBjMTZcQiIhWmjFhE8qVeE+NSRiwiUmHKiEUkP+pHnIkyYhGRClNGLCL5UUaciTJiEZEKU0YsIvnRyLpMlBGLiFSYMmIRyY9G1mWijFhEpMKUEYtIvtRrYlzKiEVEKkwZsVSpBqAINKL71U1h6keciTJiqTIN8XFtfFyTWn9pfN44qS2S05B0X8tzmQYUiKXKXBUfr4yP58Tnq4GrgSXANUAL+kIn04X+kqUKFPDvrwvA1kD4BawCNl8PDMLylbBtL6wDNl4F85bC/pXAXcAK4HvArko1Xk5E3dcyUUYsIlJhCsRSBVbgpYcWOB9glVcgng0UauE5QEObZ8mLlsK5cRuXQetS4PJ4jpZKNF5OJLlYl+cyDag0IVVgPh6Bt0AzwFq/HrcU6MBj7Pn4tovjIQuB1lpYCXStxHtY9AA/msR2i0wMBWKpsCSLXQrs86vg8xq8x1prXN2IZ8ElPFPeC8wFFgGz4va+pfE8S1C9uMpMk6w1TypNSIW1AJ1g8Xknnu124v+BW4Fe4CxgDx50i8AhPBgPdzFuHPEoMnUoIxaR/GgazEyUEUsV2OX/YWmCrr0wB+gowk48692ClyA68Cy5N647AmwlZsVJjVij8GTqUSCWCtsbHx+Jj/8H+gG+CxvxbOq7ePDtxINzL3D3oJcq9icrdwGbUX24yiT9iPNcJoCZ/Z2ZBTNrja/NzP63mXWY2X1mtna8c5wOBWKpsCSD/R7Q7U93AuyC+3s8Tnf9K+yIu24ixu5/hN2DwM3ABuA+YN8ktlumCzNbBjwPeDS1+mq8T85K4Drg43m2QYFYqkQPXnsA9g/ic0t8Jq7qgXvi47a90HcwHnNHfNyO1yqk6kyNfsQfBt4SW5t4IfDZ4H4ONJvZogn5aaPQxTqpIpvj4y/wmkQf7O7xVX2/xssOOyl3ebt/ktsnVarVzDamXt8YQrgxy4Fm9kJgVwjhN2aW3rQE/x6W2BnX7T7dxo5GgVhE8jM502B2hRDWjbXRzDbgnSJHegfwdrwsUVEKxFJFknpxJ+V67z3x8ad4+QJUC5aTEUK4crT1ZrYaWA4k2fBS4Ndmdin+9WtZavel5HglWIFYqlAhLg2U5yduoRyIZcqo4n7EIYT7gQXJazPrBNaFELrM7JvAG8zsVmA9cCCEkEtZAhSIpSq1AbVxWYUH4FX4n2sfcBD1F5acfQd4AX65+DDw6jx/mAKxVJECHoSb8Ey4Kb6+ND4v4ulVEU3uM4VMkfmIQwjtqecBeP1k/Wx1XxMRqTBlxFJlGvA/y0HKE/i04Vlwsq2EasZThG4emokCsVSZpPTQg5cjevASXR/emwJ8aJ2C8JSgQJyJArFUkYbU8xIekA9SDrwdcV1x8psmkiMFYqkiLRx7sa6NcjmiAe9F0Y33I1ZGPCVUcfe1aqJALFWkDWjHR5I2gNX69JeFJigujV9xB/ESxS8YnptCZIpTIBaR/CTTYMoJKRBLlWjASxMtQJPfOmkhnhHPirscAnproa8drxMXKM8WLzJ1KRBLFSkxXFCchf91ziqvOvYaXW1qUSCuavrnGZcCsVSJpO9wVAS68Cw4mXe2mGx4BM+ENQ2mTA8KxFIlkp4StceuPoLH5xJ4N7a9+LzFmgh+SlA/4kw0xFlEpMKUEUuVWIJ3XWuDecB8yiOcwTPjPW3Q1walpfj0sHehdKvKqR9xJgrEUiXafFkWn54FtFL+Cy3h9eI+YFcLPHIZlFYAv8b7FItMXQrEUgUagRYvEbdSDsKtlLuuAfQCzXgZeRDoaMPnKe5Ed+2oUupHnIkCsVSBZBhzlFycK+EliRr8P/NgfH0I6E92PoiGO8tUp0AsVSDVW+IIHmQPxU3JX2gRn2YimYStaxC/j90vUJ24iqnXRCbqNSEiUmHKiKXCCngPiBavCTenlrlxl+Sqew2eOA+Bp8h70ZSYU4Ay4nEpEEuFtQHnwLxaeDLeg20R5WCc/IUmteFe4HxgSxNs+lMo7gW+jOrEMpUpEEuFtQFLPSluxztBtOIT/pxJ+TpeEogPAXv8EFqBzW3Q8SfA/5n0lksG6keciQKxVFgL0HBsSaIZD8JnBSgM+VKqgbmF8twTR/AYfojYjW0B6sImU5UCsYjkR/2IM1Eglgpr9LmHE0fwjLcfOGJQKDD8Z7qfcte2Xrw7Wxd4fVjZcFVS97VMFIilwlp89NxcyhOvJTXFvtS6I3jQ7QV245Ov3U+8W9J3J6mtIvlQIJYKWgAs9V4QF+KPK4BWqGs9SN2sAepn+RC6w4dmU+xthN6CX6SDcs+1jtXo/nVVShlxJgrEUkFtHngvBi4B1sGC8x6lmV7m081sDlMXxzIPNRXoa2qkeHYDe9e0sfuiZbCqAOuAb6+BH7cAN1XsnYicDgVimUSNeL0h0eZd1tqBcz0It9PJfLpopZtG+qhjAIAhajjMbIo0sIB9NJ/dy9a55zLQ2gRPAB1LYXeBcvrVEBf1L64odV/LREOcRUQqTBmxTKKRxcIl5X7D86CBwzTSF/PewzTEHBg8I66jn3r6KVFDH400t/Syr7WpPDR6d/r85wCz8ax4V87vS05I3dfGpUAsk2jEvBDW7nMPNwOzShRS/2OHKDBEgQHqqGGIfuoYoD6GZg/VfQcbvUtbF34/0WEFfLRHLT5Npkh1UyCWSXAlfiukAt674afAengmvqyDVWffz5N5iMU8RjO9NNNLI33UxOA8QB19NNJHIzUMcZjZNDf1Upw3z7u/1ZJKuK/EC8+DePBXj4qKCpVuQPVTIJYJcjmehQ7ity/aHte/Ela1exw+C3h8KfzwCv/P+Qcw/9pdXHzGJtZzD+fxEMvpHA7EszlM3ZBfrBuo8UB8mNnsYwGPsozNXMC289r58dt/n92ty+GN10PxESis9DgM0LkUSo3A90a0N31hT6SydLFORKTClBHLCAX8e/7IeX6XAJfiF7/2ARtS214K81b6nZcBOtYA7/PzrGqHaxkeqEEXXhN+ALgannPGBtbxK57Bz7iAB5nXUfShy/vwbmlHkmYN0HrmIZgDFy7eyhPL7+Hh+iezg2UsYwdfv+6P2LrzQvj4Svg9vH9xAZ+p7SfrfRTecFZ8VXw/RXzD/af7SxM5LQrE09aJvnovwfvXjgy2aynXcjfj44gTV0HDUq/H7l+JXwT7he/buhKeS3nE20bg7rVArZdrnw91Kw/S3NJLb08zA11N0AvnrnmAZ/AzD8Q9v8I24hfdkqkjDlAOxLOAOXFZAHOedJRLLtrMuSu3UlczQB+NbH3RhXA3XiW5Av/M6MKn1Ny9Hro6vL0N68sl5I6V3k5+nXqvq+PBeymXWETyo0A87TTgXbfAo9nIAQ1JsD0I/GjEcZfidd7kdRKIz4HGpT4Crh7PWO9diwfi9eUMtJVy7L+7HWj00XLrH2UZO2iml+6W+Wy66GmwEVZzP5ewiYv778XuwQP4I5Qz4gOUbxJaoByIF5e3N+0bYN3vb6STdhat3cbu9uXwdFi0fhuzOUzv0Wa6Zy3xpPerl/m5LgNW4oF4GXDnNfEH98XfwZV4cO4BfsCxH0giE0+BeNpZgqd7SbabDsQL8GyvDY92HZT72K4Ga/PssQDsWJk6bo2XFlbgmWkzcG9b+bjz8WU+3mf0EPFntMBFcC5bh3tDNNLHpvb1MNc4lw7OZStzthz1QLkZj4f74OA+6DsCh/HY3gA0FaBxDtR242WLOC9x64JDPPn8h2ink93Ny2m4eD8X8CB19NN3RiObLq7n0CWt8NV2n+nt9+J7KcX30glsW4t/MF0Gy2v9ffa2wO7LUCCWvCkQT2nncPxX5yY8CPZw7HBi8AC9BM/2YqAcDsRLPAgvxO8N10WqcrHC74ixFA9QBWAe3oc3Gaa8FGjt9wncd8SpK5dBXftBFvPYcCCuoURDay/F5nksYwdLHu+G3wE7gG2+7O32VqWLJwWgqQSNB2DpE95y5sQNj8Ki8x+jjb1QC8uadtBOJ/X000sz3bNb2dze6iOs2yhPLlSKx58PbFsF/AjmNfnrOfhn1eNL1blCcleVvSbMbKWZHTGzz49Y/1Iz225mT5jZ182spVJtFJEskskm8lymvmrNiD8K/DK9wswuBD4B/AF+ZeVG4GP4NfkZpoXhWwyNqoCnfyO3twC1vrpYO2J7W3m4MXhGWEwu+KWGEc/CSw9z8Yy4NVn6ObN1PwNH6ik2zvNzLIX5Ld3D/YKb6WWAOupm9VM8E9rY59fD9jH8uKvbn+7CE9IkI07GyDXhTWrcB7V7Yzv3MTxJEIOwGM+O6xigjgHa2MvmhbHN7XFZGtPcIwX/FpDUxtvxbLk+/go7gW0jJysSmVhVF4jN7Fp8+u+f4f8lEi8D7ggh/Gfc753AZjNrDCHMsP8lqbtWjCr5Lj0yWxgrcMdts/CyxMjzFPBts1LPE83AXGiYe5j6Oh98UZwFcBBam+LcEYeHlzoGKBSG4CxoptfrDwd8dw558O2h/JgOxIMMfyzQcwDaDuK14iegof8wdfUDMMRwLbqOAYao8QA9J55oEdAKc1t7GSrVUGydV/7wodGDciseiMHr3ttaUCA+VZqQOIuqKk2YWRPwHuBNo2y+EPhN8iKEsBUYAM4b5TzXmdlGM9vol3ummz48RO0dZVsyrDdZ0krlXWCU7dEQx07UUjtieyl1aHKX5eN+TA/MhTr6qWFoeKgyQP+RemiGevpTt0WCwfgyCbjpZTD1WEx+RLKxHwpDRxmiBo7A7OEJgw4P/3xq/Wd4Zt/P7NmHmT33cPkDBjjmW8E8Ul8qRv4CRCZWtWXE7wVuCiHsNLOR2+biuVPaAfy/yzFCCDfipQvMFk/Dke5F/Pv8aIG0Bw/QtRwfqHuAQSjVpvZLnbOvyYPSIP6dJHEkLsmtiw4dv72/WEfdrDoGjtTHXhM9MCuZvMdDcX8sFhzqbUxloQwn+LWFY/8gk7x/ZD41/H0g2bkG+uvrOEwDDHJM0D/mPfQCs+CMmpLvc1wa0lI+eXoZ6wNLMtCExFlMWkZsZneZWRhj+YmZXYx34PzwGKc4RCwRpjSh74wiMsVNWkYcQrjiRNvN7I34pZJHYzY8F6gxswtCCGvxQbFPSe3/JLyS93A+La52Y2VpuyjXC0be2XhvavveEdt7oLvNSxIlIKTOH/BssgvPiLuAUsxyDvly9MAc+oCjT8wu31n5CMNFgj4ah+cRZk89FKCfev8XrGd4sEZTt3+yJpNXJrXhWvyrT1OyJIM7zvTlcE0DvcyDWp+7eCAWeYuxOk0vEPxMR4cKDByto1TyUoZn8EWGSxBJySP5JqCpNE+DasRZVFNp4kbg1tTrN+OB+a/j61uAu83sWXivifcAt828C3VZjDXtYwfl3hYjyxadsH+VR8ESHDvB707YsbR8sa4z9TO68Lsq74Gjh+Z4UOsEOOgX3w630j17PjWUmM1s9tLm21vxoDyfcieQFmhLBmvgxZOkwl+LB+CkK3BD+rj50E0r+1gAMBz4a+JjL83xw2EXHGmH3noOz51Nf7Gu/AHDTv9BRfw9JI+9oC9dp0OliSyqJhCHEA6TurJmZoeAIyGEx+P2B8zsdXhAno/POvPqSrR1avs1o0/qcz+wBEoteCROz72wBR5a6tlyDTHQ3ueb+gaho9Yvbp2JB9EtAD2wEw51trLjgmX0U8dsiuxgmR9fgH0soP9sqH8MONsPaeiH9m5o2FfuNZHOiOcXoGUBPjT57Lgsgx0s4zEWA9DFfLqZTw1D7GUBe1kQ29wJve3QBcXCPM92d8aFDn/f3fhEQfXxcedp/KpFMqqaQDxSCOGGUdZ9AfjC5LdmOkm+d49UxIf4LojP0yP27oG+8+HepT5EOPRQHvb7C/jVZR4p5+CBeBNAn8e2+6Fjxbn01TVSRz87Bpb5+rmwjXY6Zp/Lhau2epWkH/+L3AttZ0LbAe9JAX4h75i5Jpbh80WshIOr6uiknX0Png2HYDeLaaSPAkPspY3tjy2PE6x1+gi+DjzbPRKfb8YbSosH7Ob41nYAfbpQd3qUEWdRtYFYKqGH0e96XMKnkFwFIbnLRmID3HuZB7VmPMBti8Grbyf8dCkHzlrIgYULYW4JOgoew2fB/azhflZTs6jE+eu2+1/jmRwz6U9tLFMcM+nPAmA5Pm3GSri/ZjX3s9o/ALpg66NPhrO998RjhxfDxvr44bALHgJ+i2e7R4jHHMQ/fHb5MOukL/UuOPabgUg+FIhFJGe6WDceBWLJaBdj3w35Fth8OV66L+JTRwLcDl//b/50CdBY8Jrr/cAR+PHBZ7GiqYNemhlY8TMuWPAwheWUhzwf9P2Ga9NJRtwGLIeu8+eyjXbuYT33sN6n0ewEflJg60UX+s/diV9N6IjDQHYchLuavKn9xEw5Pcn9PXFie+LJ0ttE8qFALBOgg3KPjEHKvQx6YMcG+NSV3v8luUNHVw90NVD8t3l86a1/ykNnPJnHWMzqpvtpf+o2Wulm/lA3TT0DHoiTWdJmQf8c6Jo9nx0sYyvnso12fsYz+NXDl8GP8XrvrcBFsQk7gbsAbosrvgz3vji2tYiXHtJ36PhefF1Ak8JPBNWIs1Aglgk0Wn35p1Dshs2rKM+T/F1gO7zjLXTvX8IPn7uEB593ARdzLyvYSjO9tNXspfmsXuoYoCZ+tR2gnsPMppv5PMZiOmmnk3Y2/W69B9+NALfBHavhWys9iy6BR+Kkrr0L+Ndx3sdYmb9IPhSIZRJ04N0q+vAUNck0N8Cma6AVdi9cTs2aIfpoZB69zI+zqdXRT4Eh+qnnMA0MUM9eFrCbxXQcXsGhjlaPs3eAB/h4D7oAlBrQ8ORK04COLKpq0h8RkZlIGbFMgmSg8kGOrbte6X2Bl8EZbU/QSN/wkkybmUzgU0OJAkMMxCNL1DBwpM67y+0BtoLfQy9N2XDlqUachQKxTILYR/e4O0cX/P/oETjaXx+nca+nn3pK1NBPvU+Vic/iVhqeULPAEAWf6S2ZD2L/yJ/ZEJfR6tYi1UWBWCZJH8fP2RBH5TUArQW2FlZQWlzDPHrppXnUGnGR2XQxn8cGFsGOei8574DjJ+YZbT5mmXyqEWehQCwVtAHubYQta3zioM56tl90PtsXQt3CgzS39NLAYQoMeSmCeg4PNHBgTyt0FnyEXAc+L9+YEx2JVD8FYqmw26G4C759tc9TsQNYBgNLm9jX2uSToSZ/pUV8n8fxsRYPkZor4pHjzizVQDXiLNRrQkSkwpQRS4VdClwJ5+PDoBcxfENS6in/habubccT+E2yuuJyXG8MqR6qEWehQCwVthrm1fqgu2V4MJ6H3015boDCkC9H6qAQ72OYvqM0oAtzMtUpEEuF9fldMJJOFU/gvSgO4YG3UIBCDRwxj7XJ3BNH0K2MpgTViLNQIJYK+67fH++na32WtSfwbHghPjdxAx6QSwzfH2/4zhnDXddG3ptPZGpRIBaRHKlGnIUCsVRYH3AHFB+BO6+GLU1eJ16GzxncSPmOGUNx927K3dZKPcQb0klVUmkiCwViqRLxNk17mvz/bRJ0k0Bci9eD+/BJ4zuBUhGvT4y8I7XI1KJALFVgCfBiaGzx3hP1eDe2Vso38jyCX9Q7kj4uybTUY6K6qTQxHgViqbBGYAXQ4n2H5+LBtw04C++mBh6E4106hvfra2Dsu1KLTB0KxCKSI9WIs9AQZ6mwPnyKzE6f+KcXLz/0413VktFzvZT7EQ/GZfhYkalNGbFUgQ48oF4Jm9f69bc9+B2bG1K7JX2Jh4c2b0YX6qqdMuIsFIilShTxG89thr4VsLkdaPNAnNSJk0AcBvHgvRNN/C7TgQKxVJEG/CpdbVzw+Jx0ZwNPsOjBhzX3oR4T1U4DOrJQIJYqsQRYFZcW70wxN24q4P+Xe4lxtwkP1ArCMj0oEItIjlQjzkKBWKpEA9Dii+GDOubETbV4bXgW/n+6BPrPLdOJArFUiQ48EBcgLIXuBu/CVh839+OViBKU68Oa/rL6qUachQKxVJFf4F3S2iGsgL62OHouGUFXxIPv3rjoP7hMDwrEUmX6gPvxfsXt+FW7prhtkHImrIEcU4NqxFloZJ2ISIUpI5Yq1IJnwy3EW3RQLkMMonvUTSWqEWehQCxVpAGfia2N4R4UgHebOEj5ap0u0sn0okAsVaSAB91C6jmp1/pznXpUI85Cf9lSRfqA+/CyRBvl8kMD5eHMe+NzkelDgViqTAnvU9wBLMCz4hbKQTneUkmmCNWIs1CvCRHJUVKayHM5dWZ2g5ntMrNNcXlBatvbzKzDzB4ys+ef1g8ahzJiqWL74mMP/h8uKVGITKgPhxA+lF5hZhcA1wIXAouBDWZ2XghhaLQTnC4FYqlijXhpogF1V5uqpmxp4oXArSGEfmCbmXUAlwJ35/HDVJqQKtQAnAOsxKfHbMGDsvIGycUbzOw+M/u0mc2L65YAO1L77IzrcmEhhLzOXRXM7HFge84/ppV4854pTO9hfOeEEM7K8fzTjpl9D/93ydMs/G6GiRtDCDem2rABWDjKce8Afo7/zQTgvcCiEMJfmNm/AT8PIXw+nuMm4LshhK/m8QamfYoxGf9xzGxjCGFd3j8nT3oPkocQwlVV0IYrs+xnZp8EvhVf7gKWpTYvJccJTlSaEJEZy8wWpV7+EfDb+PybwLVmVm9my/E62S/yase0z4hFRE7gg2Z2MV6a6AReCxBCeMDMvgw8iF9tfH1ePSZgBtSIJ4OZXZeuSU1Feg8ilaNALCJSYaoRi4hUmAKxiEiFKRCfgJmtMrP/MLMDccz5H6W2vSauO2Rm3zOzxaltZmYfMLPuuHzAzGyS2vwGM9toZv1m9pkR255jZlvM7LCZ3Wlm56S21ccO7QfNbI+ZvSnrsVX0Hv7EzH4Wt901ynkvNrNfxe2/ihdpRCpOgXgMZlYAvoH3K2wBrgM+b2bnmdkVwD/iwyBbgG3AF1OHXwe8CHgKsAa4hng1dhI8BvwD8On0SjNrBW4D3om3eSPwpdQuN+BddM4Bng28xcyuynhstbyHHuAjwPtHntDM6vB/z88D84CbgW/E9SKVFULQMsoCXAQcIl7QjOv+HR998yHgo6n1i/HuL+fG1z8Drktt/0t8lM5ktv8fgM+kXl8H/Cz1eg4+gcP58fVjwPNS29+Lj7Uf99hqeQ+p9a8B7hqx7nl4h/z0v+ejwFWV/lvTokUZ8ckxPEAnzxnxPNl2IfCb1PbfxHWVdEybQghPAFuBC+P4+kWM3eYxj825zSOdTjsuBO4LIaS7Cd2X8ViRXCkQj+0hfB7G/2FmtWb2POByYDbwPeBPzGyNmTUA78Iz4tnx2LnAgdS5DgBzJ6tOPIaRbSK+bozb4Pg2N2Y4djKdTjuq5T2IHEeBeAwhhEG8zvsHwB7g74AvAztDCBuA64Gv4aNxOvGJcnfGww8BTanTNQGHRmRjk21km4iv++I2OL7NyeS/Jzp2Mp1OO6rlPYgcR4H4BEII94UQLg8hzA8hPB94EnG8eQjhoyGElSGENjwgFyiPU38Av1CXeEpcV0nHtMnM5gDnAg+EEPYDuxm7zWMem3ObRzqddjwArBnxrWRNxmNFcqVAfAKx9DDLzGab2ZvxOupn4rqLYje1s4Ebgf8VAxrAZ4E3mdmS2K3t74DPTFKbC2Y2C6gBamJbC8DtwEVm9pK4/V14zXRLqs1/b2bzzOx84K9SbR7v2Kp4D2ZWE9cXgDPiccmtoO8ChoC/jV313hDX/0ce70HkpFT6amE1L8A/A/vxr7XfBVbE9c34hZ4n8LLFPwE1qeMM+CDlO11+kNTV+pzbfANer04vN8RtVwJb8J4GdwHtqePq8e5iB/FbJb9pxHnHPLaK3sOrRjnuM6ntlwC/isf+Grik0n9jWrSEEDTXhIhIpak0ISJSYQrEIiIVpkAsIlJhCsQiIhWmQCwiUmEKxCIiFaZALKfEzP7JzN54isf+NzP7wAQ3SWTKUj/iKmJmnUAbPgLsED650BtCCIdOdNxkM7OzgE34AJfiKRw/C+gA1oYQ9k1w80SmHGXE1eeaEMJc4GJ8JNjbKtucUb0K+M6pBGGAEMIRfKTiKyayUSJTlQJxlQoh7AG+jwdkAMzsrWa21cz6zOzBEbduepWZ/cTMPmRm+81sm5ldndq+3Mz+Mx67wcw+amafT21/WrzNUK+Z/SbehWQsVwM/Sh17hZntNLO3mNk+M9ttZi8ysxeY2cNm1mNmbx9xjrvwme1EZjwF4iplZkvxgNeRWr0VeBZwJvBu/NZNi1Lb1+PzKLfi81vclJpt7Av4zHHz8bkc/jz1s5YA38bviNECvBn4WixBjGZ1/DlpC4FZwBJ8Mp5PAi8Hnhrb/E4zW57afzPHzvYmMmMpEFefr5tZH7ADn5j++mRDCOErIYTHQghHQwhfAh4BLk0duz2E8MkQwhB+T7ZFQFucIe73gHeFEAZCCD8Bvpk67uV4qeE78dw/wO8H94Ix2tjM8fP4DgLvCz6P8634h8H/CiH0hRAeAB7k2MDbh3+giMx4CsTV50UhhEbgCuB8PKABYGavMLNNsXzQi9+aqTV17J7kSQjhcHw6F7+nXk9qHXigT5wD/NfkvPHcz8QD+Wj2c/ydLbrjBwD47Gbgs7iRWjc39bqR4++YITIjKRBXqRDCj/D5gD8EEG8b/0ngDcD8EEIzPhF9ltsv7QZazGx2at2y1PMdwOdCCM2pZU4I4bi7IUf3AeedzPsZxSqOvUeeyIylQFzdPgI818yegt+xOACPA5jZqynfrPSEQgjb8VLDDWZWZ2ZPB65J7fJ54Boze34yuXq8ALd0jFN+B79/3+m4HO85ITLjKRBXsRDC4/idM94VQngQ+J/A3fhX/tXAT0/idC8Dng504xflvgT0x5+zA3gh8HY80O8A/gdj/318FnhBvHHqSYv9iF+A17FFZjwN6JihzOxLwJYQwvXj7jz68f8I7AshfOQUjv1vwLIQwltO5WeLTDcKxDOEmf0eftumbcDzgK8DTw8h3FvJdomI32RRZoaFwG14P+KdwF8rCItUB2XEIiIVpot1IiIVpkAsIlJhCsQiIhWmQCwiUmEKxCIiFaZALCJSYf8/3aoNoEaoVpMAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x648 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "from numpy import log10, amax\n",
    "\n",
    "\n",
    "# Normalize the image\n",
    "\n",
    "bpi = abs(bp_image) / amax(abs(bp_image))\n",
    "\n",
    "\n",
    "\n",
    "# Set the figure size\n",
    "\n",
    "plt.rcParams[\"figure.figsize\"] = (6, 9)\n",
    "\n",
    "\n",
    "# Set up the axes\n",
    "\n",
    "fig, axes1 = plt.subplots()\n",
    "\n",
    "\n",
    "# create the color plot\n",
    "\n",
    "im = axes1.pcolor(xi, yi, 20.0 * log10(bpi), cmap='jet', vmin=-dynamic_range, vmax=0, shading = 'auto')\n",
    "\n",
    "cbar = fig.colorbar(im, ax=axes1, orientation='vertical')\n",
    "\n",
    "cbar.set_label(\"(dB)\", size=10)\n",
    "\n",
    "\n",
    "\n",
    "# Set the plot title and labels\n",
    "\n",
    "axes1.set_title('Stripmap SAR', size=14)\n",
    "\n",
    "axes1.set_xlabel('Range (m)', size=12)\n",
    "\n",
    "axes1.set_ylabel('Cross Range (m)', size=12)\n",
    "\n",
    "\n",
    "\n",
    "# Set the tick label size\n",
    "\n",
    "axes1.tick_params(labelsize=12)\n",
    "\n",
    "\n",
    "# Set the axis to be 'image'\n",
    "axes1.axis('image')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
